在沒有行情的收盤或假日時段,也可以找點事情來做。 好比是回顧歷史,借古鑑今。 判斷一檔股票是否熱絡,可以直接從「交易量排行榜」很直觀地看出。 而去撈取交易量 “排行榜” 的功能,或許從現有的 API 可以湊出想要的功能但不好做。 所以本篇將說明如何去拿回公開資料,進行資料的蒐集。
start = date(2004, 2, 11)
開始,結束日期可以手動派,或是指定成今天。strftime
產生想要的日期字串。cp950
換成 UTF-8
編碼。download_mi_index20.py
import time
import subprocess
from datetime import date, timedelta
from pathlib import Path
def download_mi_index20(start=None, end=None):
if start is None:
start = date(2004, 2, 11)
if end is None:
# end = date.today()
end = date(2022, 12, 31)
while start < end:
# 根據年份產生目錄
Path(start.strftime('%Y')).mkdir(parents=True, exist_ok=True)
date_str = start.strftime('%Y%m%d')
url_str = f'https://www.twse.com.tw/rwd/zh/afterTrading/MI_INDEX20?date={date_str}&response=csv'
local_path = f'{start.strftime("%Y")}/{date_str}.csv'
local_utf8_path = f'{start.strftime("%Y")}/{date_str}_utf8.csv'
# 透過外部呼叫執行指令下載檔案
subprocess.run(['wget', '-O', local_path, url_str])
# 下載的檔案編碼轉換
with open(local_path, 'r', encoding = 'cp950') as inF, open(local_utf8_path, 'w', encoding = 'UTF-8') as outF:
outF.write(inF.read())
time.sleep(5)
start = start + timedelta(days=1)